package step1_homework4_04;

import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.ServerSocket;
import java.net.Socket;

/*

使用基于 tcp 协议的编程模型实现将 UserMessage 类型对象由客户端发送给服务器；
服 务 器接 收到 对象 后判 断 用户 对象 信息 是否 为 “admin” 和 “123456”，
若 是则 将 UserMessage 对象中的类型改为"success"，否则将类型改为"fail"并回发给客户端，
客户 端接收到服务器发来的对象后判断并给出登录成功或者失败的提示。
其中 UserMessage 类的特征有：类型(字符串类型) 和 用户对象(User 类型)。
其中 User 类的特征有：用户名、密码(字符串类型)。
如：
UserMessage tum = new UserMessage(“check”, new User(“admin”, “123456”));

*/
public class Server {

    public static void main(String[] args) {


        //创建ServerSocket类型的对象并提供端口号
        ServerSocket ss = null;
        Socket s = null;
        ObjectInputStream in = null;
        ObjectOutputStream out = null;

        //等待客户端连接请求，调用accept方法；
        try {
            ss = new ServerSocket(4444);
            System.out.println("等待客户端的连接请求....");
            s = ss.accept();
            in=new ObjectInputStream(s.getInputStream());
            Object o = null;
            try {
                o = in.readObject();
            } catch (ClassNotFoundException e) {
                e.printStackTrace();
            }
            //流对象强制转换
            UserMessage msg=(UserMessage)o;
            User user = msg.getUser();
            //判断
            if ( "admin".equals(user.getUsername())&&"123456".equals(user.getPasword())){
                msg.setTYPE("success");
            }else {
                msg.setTYPE("fail");
            }
            out=new ObjectOutputStream(s.getOutputStream());
            out.writeObject(msg);
            System.out.println("客户端连接成功！");
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if(null != s){
                try {
                    s.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if (null != ss){
                try {
                    ss.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}
